/*
 *
 *  Copyright (C) 2007-2020 SimplyCore, LLC
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *
 */

#ifdef _USBD_ENABLE_STUB_
#include "usbd.h"
#include "loader.h"
#if KERNEL_LT_EQ((0xfa3+5772-0x262d),(0x136b+1350-0x18ab),(0x56+3098-0xc4a))
#include <linux/smp_lock.h>
#endif
#if KERNEL_GT_EQ((0x810+6104-0x1fe6),(0x1d43+1914-0x24b7),(0x1ab+343-0x2e3))
#if KERNEL_LT_EQ((0x28d+5808-0x193b),(0x61c+5405-0x1b33),(0xdff+5262-0x226d))



#include "vhci_hcd.h"
#endif
#endif
static struct list_head llIlllI;static spinlock_t IIlIII;extern struct IIIlll*
IIlllIlI;extern struct list_head llllIllI;extern struct mutex lIlIIllI;extern 
struct list_head lIlIllIl;extern struct mutex lIlIIIll;extern struct list_head 
IllllIIl;extern struct mutex llIIllIl;
#if KERNEL_LT_EQ((0xd+8987-0x2326),(0x505+8495-0x262e),(0x1900+3409-0x263e))
extern struct notifier_block llIIIIII;
#else 
extern struct notifier_block lIIlIIlI;
#endif
#ifdef _USBD_DEBUG_MEMORY_
extern atomic_t lllllIlIl;extern atomic_t IllllIII;extern atomic_t llIIIlIlI;
#endif 


static struct usb_device_id IlIIllIIl[]={{.driver_info=(0x64d+159-0x6eb)},{}};
MODULE_DEVICE_TABLE(usb,IlIIllIIl);static int IIIllllII(struct usb_interface*
IlIlIl,const struct usb_device_id*id);static void IIIllIlll(struct usb_interface
*IlIlIl);
#if KERNEL_GT_EQ((0x250f+63-0x254c),(0x12f0+597-0x153f),(0x1ca+976-0x583))
static int IlIlllIl(struct usb_interface*llIlII);static int llIIIlIl(struct 
usb_interface*llIlII);
#elif KERNEL_GT_EQ((0xd88+3163-0x19e1),(0x9c7+7289-0x263a),(0x585+6372-0x1e57))
static void IlIlllIl(struct usb_interface*llIlII);static void llIIIlIl(struct 
usb_interface*llIlII);
#endif
void IIIllIlI(struct IIlll*IIIll,int IIIIIlI,int lIlIlIll);void lIIlllll(struct 
IIlll*IIIll);int IIIIlIIII(struct IIlll*IIIll,llIIII IIllI);void llllIlIl(struct
 IIlll*IIIll,llIIII IIllI);struct IllII*lIIIlIII(struct IIlll*IIIll,llIIII IIllI
);struct usb_driver lIIlIIl={.name=lllIIIlI,.id_table=IlIIllIIl,.probe=IIIllllII
,.disconnect=IIIllIlll,
#if KERNEL_GT_EQ((0x4bf+7047-0x2044),(0xd2+6122-0x18b6),(0x9fa+1268-0xedc))
.pre_reset=IlIlllIl,.post_reset=llIIIlIl,
#endif
};


static int IIIllllII(struct usb_interface*IlIlIl,const struct usb_device_id*id){
int IlIlI=-ENODEV;int lIIllIIII=(0x16c2+3022-0x2290);struct usb_device*IIIlI=
interface_to_usbdev(IlIlIl);const char*IIlIIll=llIlllII(&IIIlI->dev.kobj,
GFP_KERNEL);lIIIl(
"\x76\x69\x64\x3d\x30\x78\x25\x30\x34\x58\x20\x70\x69\x64\x3d\x30\x78\x25\x30\x34\x58\x20\x72\x65\x76\x3d\x30\x78\x25\x30\x34\x58\x20\x62\x75\x73\x5f\x69\x64\x3d" "\"" "\x25\x73" "\"" "\x20\x68\x75\x62\x3d" "\"" "\x25\x73" "\"" "\x20\x70\x61\x74\x68\x3d" "\"" "\x25\x73" "\"" "\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x3d\x25\x75\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x75" "\n"
,le16_to_cpu(IIIlI->descriptor.idVendor),le16_to_cpu(IIIlI->descriptor.idProduct
),le16_to_cpu(IIIlI->descriptor.bcdDevice),llIIIl(&IIIlI->dev),IlIllIlI(IIIlI),
IIlIIll,IlIlIl->cur_altsetting->desc.bInterfaceNumber,IIIlI->actconfig->desc.
bNumInterfaces);if(IIlIIll){kfree(IIlIIll);}if(IIIlIIIl(IIIlI)){lIIllIIII=
(0xa3c+519-0xc42);}else if(IlllIIlI(IIIlI)){IlIlI=IllllIll(IIIlI);if(IlIlI<
(0x34+6969-0x1b6d)){IIllIl(
"\x63\x61\x6e\x20\x6e\x6f\x74\x20\x61\x74\x74\x61\x63\x68\x20\x75\x73\x62\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73\x2c\x20\x65\x72\x72\x6f\x72\x20\x25\x64" "\n"
,llIIIl(&IIIlI->dev),IlIlI);}else{lIIllIIII=(0x1127+4228-0x21aa);}}if(lIIllIIII)
{IlIlI=lIlIIIllI(IlIlIl,(0x1800+268-0x190c));if(IlIlI<(0x5d7+4330-0x16c1)){
IIllIl(
"\x63\x61\x6e\x20\x6e\x6f\x74\x20\x61\x74\x74\x61\x63\x68\x20\x75\x73\x62\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x25\x73\x2c\x20\x65\x72\x72\x6f\x72\x20\x25\x64" "\n"
,llIIIl(&IlIlIl->dev),IlIlI);}}return IlIlI;}
static void IIIllIlll(struct usb_interface*IlIlIl){lIIIl("\x2b\x2b" "\n");if(
usb_get_intfdata(IlIlIl)!=(void*)-(0xd58+5931-0x2482)){lllIIlIlI(IlIlIl);}lIIIl(
"\x2d\x2d" "\n");}
#if KERNEL_GT_EQ((0x1a33+2369-0x2372),(0x18c+2998-0xd3c),(0x1716+2080-0x1f1f))
static int IlIlllIl(struct usb_interface*llIlII){return(0x16ba+691-0x196d);}
static int llIIIlIl(struct usb_interface*llIlII){return(0x1693+1365-0x1be8);}
#elif KERNEL_GT_EQ((0x74f+6034-0x1edf),(0x6bf+899-0xa3c),(0x1d78+478-0x1f44))
static void IlIlllIl(struct usb_interface*llIlII){return;}static void llIIIlIl(
struct usb_interface*llIlII){return;}
#endif


int IIIlIIIl(struct usb_device*IIIlI){int IlIIIIllI=(0x184d+1385-0x1db6);struct 
IIlll*IIIll;spin_lock(&IIlIII);list_for_each_entry(IIIll,&llIlllI,IIIIll){if(
IIIll->llIII==IIIlI){IlIIIIllI=(0x53d+4018-0x14ee);break;}}spin_unlock(&IIlIII);
return IlIIIIllI;}
int IllllIll(struct usb_device*IIIlI){lIIIl("\x2b\x2b\x20\x25\x73" "\n",llIIIl(&
IIIlI->dev));if(IIlIlIIIl(IIIlI)==NULL){lIIIl(
"\x63\x61\x6e\x20\x6e\x6f\x74\x20\x63\x72\x65\x61\x74\x65\x20\x73\x74\x75\x62" "\n"
);return-ENOMEM;}lIIIl("\x2d\x2d" "\n");return(0x1c7d+991-0x205c);}
int IllIllll(struct usb_device*IIIlI){struct IIlll*IIIll;lIIIl(
"\x2b\x2b\x20\x25\x73" "\n",llIIIl(&IIIlI->dev));IIIll=IllIIIIl(IIIlI);if(IIIll)
{lIlIllll(IIIll,NULL,(0x21a+4105-0x1223),(0xfd4+2541-0x19c0));lIllIlIl(IIIll);
lllllIll(IIIll);}else{lIIIl(
"\x64\x65\x76\x69\x63\x65\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64" "\n");}lIIIl(
"\x2d\x2d" "\n");return(0xca3+1469-0x1260);}int lIlIIIllI(struct usb_interface*
IlIlIl,int IIlIlllIll){int IlIlI=-ENODEV;struct usb_device*IIIlI=
interface_to_usbdev(IlIlIl);struct IIlll*IIIll;lIIIl("\x2b\x2b" "\n");IIIll=
IllIIIIl(IIIlI);if(IIIll){


IIIll->lllIlllI+=IIlIlllIll;IIIll->lIIIIIll=IIIlI->actconfig?IIIlI->actconfig->
desc.bNumInterfaces:(0xef1+338-0x1043);if(++IIIll->lIlIIlII==IIIll->lIIIIIll){
lIIIllIlI(IIIll);}lIIIl(
"\x69\x6e\x69\x74\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64" "\n"
,IIIll->lIlIIlII,IIIll->lIIIIIll);usb_set_intfdata(IlIlIl,IIIll);
IlIlI=(0x21b0+1224-0x2678);}lIIIl(
"\x2d\x2d\x20\x72\x65\x73\x75\x6c\x74\x3d\x25\x64" "\n",IlIlI);return IlIlI;}
void lllIIlIlI(struct usb_interface*IlIlIl){struct IIlll*IIIll;lIIIl(
"\x2b\x2b" "\n");
IIIll=usb_get_intfdata(IlIlIl);usb_set_intfdata(IlIlIl,NULL);IIIll->lIlIIlII--;
IllIlllIl(IIIll);
IllIIlIll(IIIll,IlIlIl,NULL,(0x7d2+4153-0x180a));lIIIl(
"\x69\x6e\x69\x74\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64" "\n"
,IIIll->lIlIIlII,IIIll->lIIIIIll);lllllIll(IIIll);
lIIIl("\x2d\x2d" "\n");}

int IIllllIIl(void){int lIllIlIll=(0x6ec+3891-0x161f);int IlIIIIlIl=
(0xb66+3023-0x1735);int IlIlI=(0xc18+4752-0x1ea8);do{INIT_LIST_HEAD(&llIlllI);
spin_lock_init(&IIlIII);INIT_LIST_HEAD(&llllIllI);mutex_init(&lIlIIllI);
INIT_LIST_HEAD(&lIlIllIl);mutex_init(&lIlIIIll);INIT_LIST_HEAD(&IllllIIl);
mutex_init(&llIIllIl);IIlllIlI=lIlIlIllI();if(IIlllIlI==NULL){IlIlI=-ENOMEM;
IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x69\x6e\x69\x74\x5f\x6d\x6f\x64\x75\x6c\x65\x3a\x20\x75\x73\x62\x64\x5f\x6c\x6f\x61\x64\x65\x72\x5f\x61\x6c\x6c\x6f\x63\x5f\x6d\x69\x6e\x6f\x72\x2e\x20\x45\x72\x72\x6f\x72\x20\x6e\x75\x6d\x62\x65\x72\x20\x25\x64" "\n"
,IlIlI);break;}


IlIlI=usb_register(&lIIlIIl);if(IlIlI!=(0x1e34+14-0x1e42)){IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x69\x6e\x69\x74\x5f\x6d\x6f\x64\x75\x6c\x65\x3a\x20\x75\x73\x62\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x69\x6c\x65\x64\x2e\x20\x45\x72\x72\x6f\x72\x20\x6e\x75\x6d\x62\x65\x72\x20\x25\x64" "\n"
,IlIlI);break;}lIllIlIll=(0x1153+1184-0x15f2);
#if KERNEL_LT_EQ((0xe52+3875-0x1d73),(0x691+3687-0x14f2),(0xc77+2356-0x1598))
usb_register_notify(&llIIIIII);
#else 
IlIlI=bus_register_notifier(lIIlIIl.drvwrap.driver.bus,&lIIlIIlI);if(IlIlI!=
(0x53+5245-0x14d0)){IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x69\x6e\x69\x74\x5f\x6d\x6f\x64\x75\x6c\x65\x3a\x20\x62\x75\x73\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x5f\x6e\x6f\x74\x69\x66\x69\x65\x72\x20\x66\x61\x69\x6c\x65\x64\x2e\x20\x45\x72\x72\x6f\x72\x20\x6e\x75\x6d\x62\x65\x72\x20\x25\x64" "\n"
,IlIlI);break;}
#endif
IlIIIIlIl=(0x1d2d+241-0x1e1d);}while((0xb8+143-0x147));if(IlIlI!=
(0x16aa+1126-0x1b10)){if(IlIIIIlIl){
#if KERNEL_LT_EQ((0xe13+356-0xf75),(0x665+2558-0x105d),(0x13e7+3892-0x2308))
usb_unregister_notify(&llIIIIII);
#else 
bus_unregister_notifier(lIIlIIl.drvwrap.driver.bus,&lIIlIIlI);
#endif
}if(lIllIlIll){usb_deregister(&lIIlIIl);}if(IIlllIlI){IIllllllI(IIlllIlI);
IIlllIlI=NULL;}}return IlIlI;}void lIIlllIlI(void){struct list_head Illlll;
IIlIIlII();llIIlllIl();
#if KERNEL_LT_EQ((0x322+6192-0x1b50),(0x132d+3529-0x20f0),(0xe1+7869-0x1f8b))
usb_unregister_notify(&llIIIIII);
#else 
bus_unregister_notifier(lIIlIIl.drvwrap.driver.bus,&lIIlIIlI);
#endif
usb_deregister(&lIIlIIl);if(IIlllIlI){IIllllllI(IIlllIlI);IIlllIlI=NULL;}
INIT_LIST_HEAD(&Illlll);spin_lock(&IIlIII);list_splice_init(&llIlllI,&Illlll);
spin_unlock(&IIlIII);while(!list_empty(&Illlll)){struct IIlll*IIIll=list_entry(
Illlll.next,struct IIlll,IIIIll);lIllIlIl(IIIll);}IIllllIlI();}struct IIlll*
IIlIlIIIl(struct usb_device*IIIlI){char*IIlIIll;struct IIlll*IIIll;IIlIIll=
llIlllII(&IIIlI->dev.kobj,GFP_KERNEL);if(IIlIIll==NULL){return NULL;}IIIll=
IlllIIl(sizeof(*IIIll),GFP_KERNEL);if(IIIll){INIT_LIST_HEAD(&IIIll->IIIIll);
init_waitqueue_head(&IIIll->lIIllI);INIT_LIST_HEAD(&IIIll->llllIlll);
spin_lock_init(&IIIll->lIlIlIl);INIT_LIST_HEAD(&IIIll->IlIIIII);spin_lock_init(&
IIIll->IIlIlI);INIT_LIST_HEAD(&IIIll->IIIllIIl);kref_init(&IIIll->IllIll);IIIll
->vid=le16_to_cpu(IIIlI->descriptor.idVendor);IIIll->IIllIll=le16_to_cpu(IIIlI->
descriptor.idProduct);IIIll->Illllll=le16_to_cpu(IIIlI->descriptor.bcdDevice);
strncpy(IIIll->bus_id,llIIIl(&IIIlI->dev),BUS_ID_SIZE-(0x176+5607-0x175c));IIIll
->IlIllIl=(0x1324+3599-0x2133);IIIll->lllIlllI=(0xb2f+2506-0x14f9);IIIll->
lIIllIlI=IIlIIllII;IIIll->llIII=usb_get_dev(IIIlI);IIIll->lIIIIIll=
(0x11+531-0x224);IIIll->lIlIIlII=(0x1318+75-0x1363);IIIll->IlIlIII=
(0x868+5441-0x1da9);IIIll->IIIIIlIl=IIlIIll;IIIll->lIIIIll=(0x1095+5262-0x2523);
IIIll->IlIllllI=-(0x1f54+1429-0x24e8);IIIll->IIIlllII=-(0x6e3+3678-0x1540);IIIll
->llIlIlIl=-(0x7af+4313-0x1887);IIIll->lIlIlI=lllIlIll;IIIll->llIIIlI=NULL;
spin_lock_init(&IIIll->lIIlIl);IIIll->lIlllIl=(strcmp(IlIllIlI(IIIlI),
"\x65\x68\x63\x69\x5f\x68\x63\x64")==(0xeec+2109-0x1729));







if(strcmp(IlIllIlI(IIIlI),"\x64\x77\x63\x5f\x6f\x74\x67")==(0x118c+3865-0x20a5))
{


IIIll->llIIIlII=llllIll;IIIll->lllIlIIl=llllIll;IIIll->IIlIlIII=llllIll;}else{
#if KERNEL_LT_EQ((0x6f7+8197-0x26fa),(0x19a9+2200-0x223b),(0xb27+859-0xe64))


IIIll->llIIIlII=IIlIlll;IIIll->lllIlIIl=llllIll;IIIll->IIlIlIII=IIlIlll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x70\x74\x20\x69\x6e\x74\x3d\x73\x6c\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);
#elif KERNEL_EQ((0x50a+4298-0x15d2),(0xd57+3242-0x19fb),(0x1194+734-0x1453))



if(bus_to_hcd(IIIlI->bus)->driver->flags&HCD_USB3){IIIll->llIIIlII=IllIIll;IlllI
(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x73\x67\x20\x69\x6e\x74\x3d\x73\x6c\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}else{IIIll->llIIIlII=IIlIlll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x70\x74\x20\x69\x6e\x74\x3d\x73\x6c\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}IIIll->lllIlIIl=llllIll;IIIll->IIlIlIII=IIlIlll;
#elif KERNEL_EQ((0xc50+4474-0x1dc8),(0xbf7+1446-0x1197),(0x24a+9251-0x264d))



if(bus_to_hcd(IIIlI->bus)->driver->flags&HCD_USB3){IIIll->llIIIlII=IllIIll;IIIll
->lllIlIIl=IllIIll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x73\x67\x20\x69\x6e\x74\x3d\x73\x67\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}else{IIIll->llIIIlII=IIlIlll;IIIll->lllIlIIl=llllIll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x70\x74\x20\x69\x6e\x74\x3d\x73\x6c\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}IIIll->IIlIlIII=IIlIlll;
#elif KERNEL_GT_EQ((0xee6+2789-0x19c9),(0x1b8+7439-0x1ec1),(0x9a8+4236-0x1a13))





if(IIIlI->bus->sg_tablesize>(0x8a0+7195-0x24bb)){IIIll->llIIIlII=IllIIll;IIIll->
lllIlIIl=IllIIll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x73\x67\x20\x69\x6e\x74\x3d\x73\x67\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}else{IIIll->llIIIlII=IIlIlll;IIIll->lllIlIIl=llllIll;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x62\x75\x66\x66\x65\x72\x20\x74\x79\x70\x65\x73\x20\x62\x75\x6c\x6b\x3d\x70\x74\x20\x69\x6e\x74\x3d\x73\x6c\x20\x69\x73\x6f\x3d\x70\x74" "\n"
);}IIIll->IIlIlIII=IIlIlll;
#endif
}
#ifdef _USBD_DEBUG_MEMORY_
atomic_inc(&lllllIlIl);
#endif
if(IllIllIlI(IIIll)<(0xf5a+124-0xfd6)){
#ifdef _USBD_DEBUG_MEMORY_
atomic_inc(&IllllIII);
#endif
IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x61\x6c\x6c\x6f\x63\x20\x6d\x69\x6e\x6f\x72\x20\x66\x61\x69\x6c\x65\x64" "\n"
);lllllIll(IIIll);return NULL;}spin_lock(&IIlIII);list_add(&IIIll->IIIIll,&
llIlllI);spin_unlock(&IIlIII);if(IlllllIll(IIIll)<(0x1655+192-0x1715)){IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x63\x72\x65\x61\x74\x65\x3a\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x6d\x69\x6e\x6f\x72\x20\x66\x61\x69\x6c\x65\x64" "\n"
);lIllIlIl(IIIll);return NULL;}return IIIll;}lIlIlIIIl(IIlIIll);return NULL;}
void lIllIlIl(struct IIlll*IIIll){
#ifdef _USBD_DEBUG_MEMORY_
atomic_inc(&IllllIII);
#endif
spin_lock(&IIlIII);list_del_init(&IIIll->IIIIll);spin_unlock(&IIlIII);lIIIIIlll(
IIIll);lllllIll(IIIll);}
void llIlIllIl(struct kref*IIIlIll){struct IIlll*IIIll=container_of(IIIlIll,
struct IIlll,IllIll);IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x64\x65\x73\x74\x72\x6f\x79\x2b\x2b" "\n"
);
#ifdef _USBD_DEBUG_MEMORY_
atomic_inc(&llIIIlIlI);
#endif
spin_lock(&IIlIII);list_del_init(&IIIll->IIIIll);spin_unlock(&IIlIII);IllllIIll(
IIIll);while(!list_empty(&IIIll->llllIlll)){struct IllII*lIlII=list_entry(IIIll
->llllIlll.next,struct IllII,llllIl);list_del(&lIlII->llllIl);llIllll(lIlII);}
while(!list_empty(&IIIll->IlIIIII)){struct IllII*lIlII=list_entry(IIIll->IlIIIII
.next,struct IllII,llllIl);list_del(&lIlII->llllIl);llIllll(lIlII);}if(IIIll->
llIII){usb_put_dev(IIIll->llIII);IIIll->llIII=NULL;}if(IIIll->IIIIIlIl){
lIlIlIIIl(IIIll->IIIIIlIl);IIIll->IIIIIlIl=NULL;}lIlIll(IIIll);IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x64\x65\x73\x74\x72\x6f\x79\x2d\x2d" "\n"
);}struct IIlll*IllIIIIl(struct usb_device*IIIlI){struct IIlll*IIIll;spin_lock(&
IIlIII);list_for_each_entry(IIIll,&llIlllI,IIIIll){if(IIIll->llIII==IIIlI){
lIIlIlll(IIIll);spin_unlock(&IIlIII);return IIIll;}}spin_unlock(&IIlIII);return 
NULL;}void lIIIllIlI(struct IIlll*IIIll){if(!IIIll->IlIlIII){IIIll->IlIlIII=
(0x25f+330-0x3a8);lIllIlll(IIIll);IllIIllII(IIIll->lllll);lIIIl(
"\x69\x6e\x69\x74\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x6f\x6e\x6c\x69\x6e\x65\x3d\x25\x64" "\n"
,IIIll->lIlIIlII,IIIll->lIIIIIll,IIIll->IlIlIII);}}void IllIlllIl(struct IIlll*
IIIll){if(IIIll->IlIlIII){IIIll->IlIlIII=(0x8f0+5379-0x1df3);lllIIlllI(IIIll->
lllll);lIIIl(
"\x69\x6e\x69\x74\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x6f\x6e\x6c\x69\x6e\x65\x3d\x25\x64" "\n"
,IIIll->lIlIIlII,IIIll->lIIIIIll,IIIll->IlIlIII);}}void IlIIlIlll(struct IIlll*
IIIll){if(IIIll->IlIlIII){IllIIllII(IIIll->lllll);}else{lllIIlllI(IIIll->lllll);
}}int IIIIlllII(struct IIlll*IIIll){lIIIl(
"\x69\x6e\x69\x74\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x74\x6f\x74\x61\x6c\x5f\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x3d\x25\x64\x20\x6f\x6e\x6c\x69\x6e\x65\x3d\x25\x64" "\n"
,IIIll->lIlIIlII,IIIll->lIIIIIll,IIIll->IlIlIII);return(IIIll->IlIlIII==
(0xf74+4575-0x2153));}const char*IlIIlIIll(void*context){struct IIlll*IIIll=
context;return IIIll->IIIIIlIl;}const char*lllIIIIlI(void*context){
#if KERNEL_GT_EQ((0xa0b+100-0xa6d),(0xdd5+685-0x107c),(0xcc0+3064-0x18a2))
struct IIlll*IIIll=context;return lIIlIllI(&IIIll->llIII->dev)?
"\x74\x72\x75\x65":"\x66\x61\x6c\x73\x65";
#else
return"\x66\x61\x6c\x73\x65";
#endif
}


void lIlIllllI(struct IIlll*IIIll,int llIIIll){int i,IlIlIlII;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x72\x65\x73\x65\x74\x2b\x2b" "\n");
IIIll->lllIlllI=(0xd1a+1477-0x12df);if(IIIll->llIII->actconfig){



for(i=(0xce1+3218-0x1973);i<IIIll->llIII->actconfig->desc.bNumInterfaces;i++){
struct usb_interface*IlIlIl=IIIll->llIII->actconfig->interface[i];if(IlIlIl&&
IlIlIl->num_altsetting>(0x702+93-0x75e)){struct usb_host_interface*lIIIIlI=
usb_altnum_to_altsetting(IlIlIl,(0x17e6+651-0x1a71));if(lIIIIlI){IlIlIlII=
usb_set_interface(IIIll->llIII,lIIIIlI->desc.bInterfaceNumber,lIIIIlI->desc.
bAlternateSetting);}}}}if(llIIIll==IlIIlllIl||llIIIll==IllIlIIll){IIllIl(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x72\x65\x73\x65\x74\x3a\x20\x74\x72\x79\x69\x6e\x67\x20\x74\x6f\x20\x72\x65\x73\x65\x74\x20\x64\x65\x76\x69\x63\x65\x20\x76\x69\x64\x20\x25\x30\x34\x78\x20\x70\x69\x64\x20\x25\x30\x34\x78" "\n"
,IIIll->vid,IIIll->IIllIll);IlIlIlII=usb_reset_device(IIIll->llIII);IIllIl(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x72\x65\x73\x65\x74\x3a\x20\x75\x73\x62\x5f\x72\x65\x73\x65\x74\x5f\x64\x65\x76\x69\x63\x65\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20\x25\x64" "\n"
,IlIlIlII);}memset(IIIll->lIIIlIll,(0x18e8+135-0x196f),sizeof(IIIll->lIIIlIll));
memset(IIIll->llIlIIll,(0x7bc+5173-0x1bf1),sizeof(IIIll->llIlIIll));IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x72\x65\x73\x65\x74\x2d\x2d" "\n");}
void IlllIIlll(struct IIlll*IIIll,int llIIIll){if(llIIIll!=IIlIIllII&&
usb_lock_device_for_reset(IIIll->llIII,NULL)>=(0x126d+3242-0x1f17)){lIlIllllI(
IIIll,llIIIll);usb_unlock_device(IIIll->llIII);}else{memset(IIIll->lIIIlIll,
(0xe81+3727-0x1d10),sizeof(IIIll->lIIIlIll));memset(IIIll->llIlIIll,
(0x150a+881-0x187b),sizeof(IIIll->llIlIIll));}}int lIlllIIIl(struct IIlll*IIIll,
int pipe){if(!usb_pipeisoc(pipe)){return(0x4+8259-0x2047);}if(usb_pipein(pipe)){
return(++IIIll->lIlIIIlII[usb_pipeendpoint(pipe)]);}else{return(++IIIll->
IlllIlIlI[usb_pipeendpoint(pipe)]);}}int IIIlIllI(struct IIlll*IIIll,int pipe){
if(!usb_pipeisoc(pipe)){return(0x1d59+508-0x1f55);}if(usb_pipein(pipe)){return(
--IIIll->lIlIIIlII[usb_pipeendpoint(pipe)]);}else{return(--IIIll->IlllIlIlI[
usb_pipeendpoint(pipe)]);}}void IllIlllll(struct IIlll*IIIll,int pipe){if(!
usb_pipeisoc(pipe)){return;}if(usb_pipein(pipe)){IIIll->lIlIIIlII[
usb_pipeendpoint(pipe)]=(0x260+7406-0x1f4e);}else{IIIll->IlllIlIlI[
usb_pipeendpoint(pipe)]=(0x586+5111-0x197d);}}int llIlIIIl(struct IIlll*IIIll,
int pipe){if(!usb_pipeisoc(pipe)){return(0xa58+2108-0x1294);}if(usb_pipein(pipe)
){return IIIll->lIIIlIll[usb_pipeendpoint(pipe)];}else{return IIIll->llIlIIll[
usb_pipeendpoint(pipe)];}}void IIllIlIl(struct IIlll*IIIll,int pipe,int IIIlIlI)
{if(!usb_pipeisoc(pipe)){return;}if(usb_pipein(pipe)){IIIll->lIIIlIll[
usb_pipeendpoint(pipe)]=IIIlIlI;}else{IIIll->llIlIIll[usb_pipeendpoint(pipe)]=
IIIlIlI;}}static void llllIlllI(struct IllII*lIlII){if(lIlII->lIllll==llllIll){
if(lIlII->lIIIll.lIlll){lIIIl(
"\x3a\x20\x75\x6e\x6c\x69\x6e\x6b\x69\x6e\x67\x20\x75\x72\x62\x20\x30\x78\x25\x70\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->lIIIll.lIlll,lIlII->IIllI);


usb_unlink_urb(lIlII->lIIIll.lIlll);}}else if(lIlII->lIllll==IIlIlll){lIIIl(
"\x3a\x20\x75\x6e\x6c\x69\x6e\x6b\x69\x6e\x67\x20\x75\x63\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->IIllI);IlIlllllI(lIlII->lIllII.IIIllll);}
#if KERNEL_GT_EQ((0x10d5+3270-0x1d99),(0x74b+3445-0x14ba),(0xe68+2868-0x197d))
else if(lIlII->lIllll==IllIIll){if(lIlII->IIIlllI.lIlll){lIIIl(
"\x3a\x20\x75\x6e\x6c\x69\x6e\x6b\x69\x6e\x67\x20\x73\x67\x20\x30\x78\x25\x70\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->IIIlllI.lIlll,lIlII->IIllI);


usb_unlink_urb(lIlII->IIIlllI.lIlll);}}
#endif
else{
IIllIl(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x75\x6e\x6c\x69\x6e\x6b\x5f\x72\x65\x71\x75\x65\x73\x74\x3a\x20\x69\x6e\x74\x65\x72\x6e\x61\x6c\x20\x65\x72\x72\x6f\x72\x21" "\n"
);}}static void lllIIIllI(struct IllII*lIlII){if(lIlII->lIllll==llllIll){if(
lIlII->lIIIll.lIlll){lIIIl(
"\x3a\x20\x6b\x69\x6c\x69\x6e\x67\x20\x75\x72\x62\x20\x30\x78\x25\x70\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->lIIIll.lIlll,lIlII->IIllI);
#if KERNEL_GT_EQ((0xbe5+4178-0x1c35),(0x4b2+8205-0x24b9),(0x4bd+4964-0x1805))


usb_poison_urb(lIlII->lIIIll.lIlll);
#else
usb_kill_urb(lIlII->lIIIll.lIlll);
#endif
}}else if(lIlII->lIllll==IIlIlll){lIIIl(
"\x3a\x20\x6b\x69\x6c\x6c\x69\x6e\x67\x20\x75\x63\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->IIllI);IIlIIIIII(lIlII->lIllII.IIIllll);}
#if KERNEL_GT_EQ((0x75+8195-0x2076),(0x1966+508-0x1b5c),(0x178a+3509-0x2520))
else if(lIlII->lIllll==IllIIll){if(lIlII->IIIlllI.lIlll){lIIIl(
"\x3a\x20\x6b\x69\x6c\x6c\x69\x6e\x67\x20\x73\x67\x20\x30\x78\x25\x70\x20\x75\x6e\x69\x71\x75\x65\x5f\x69\x64\x3d\x30\x78\x25\x6c\x6c\x78" "\n"
,lIlII->IIIlllI.lIlll,lIlII->IIllI);
#if KERNEL_GT_EQ((0x4e6+7992-0x241c),(0xa51+2576-0x145b),(0xed8+5928-0x25e4))


usb_poison_urb(lIlII->IIIlllI.lIlll);
#else
usb_kill_urb(lIlII->IIIlllI.lIlll);
#endif
}}
#endif
else{
IIllIl(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x6b\x69\x6c\x6c\x5f\x72\x65\x71\x75\x65\x73\x74\x3a\x20\x69\x6e\x74\x65\x72\x6e\x61\x6c\x20\x65\x72\x72\x6f\x72\x21" "\n"
);}}
void IllIIlIll(struct IIlll*IIIll,struct usb_interface*llIlII,struct IllII*
lIIIIII,int lIllIII){int i;unsigned long flags;struct IllII*IllIII,*lllIIII;
lIIIl("\x2b\x2b" "\n");
if(IIIll->lIIIIll&&IIIll->IlIllllI==llIlII->cur_altsetting->desc.
bInterfaceNumber)
{IIIllIlI(IIIll,(0x345+91-0x3a0),lIllIII);}for(i=(0xdbd+125-0xe3a);i<llIlII->
cur_altsetting->desc.bNumEndpoints;i++){do{lllIIII=NULL;spin_lock_irqsave(&IIIll
->IIlIlI,flags);list_for_each_entry(IllIII,&IIIll->IlIIIII,llllIl){int lIIIlII;
if(IllIII==lIIIIII){continue;}
if(IllIII->endpoint!=llIlII->cur_altsetting->endpoint[i].desc.bEndpointAddress){
continue;}lIIIlII=atomic_xchg(&IllIII->state,IllIlll);
if(lIIIlII==IllIlll||lIIIlII==llIllllII){continue;}IllIII->lIllIII=lIllIII;
if(IllIII->llIlIlI.IIIlIlIl){


IllIII=lIIIlIII(IIIll,IllIII->IIllI);}if(lIIIlII==lIllIlI){



kref_get(&IllIII->IllIll);

lllIIII=IllIII;break;}}spin_unlock_irqrestore(&IIIll->IIlIlI,flags);if(lllIIII){
lllIIIllI(lllIIII);kref_put(&lllIIII->IllIll,IllIIlII);}}while(lllIIII);}lIIIl(
"\x2d\x2d" "\n");}void lllIlllIl(struct IIlll*IIIll,int endpoint,struct IllII*
lIIIIII){unsigned long flags;struct IllII*IllIII,*IlIlllI;lIIIl("\x2b\x2b" "\n")
;if(IIIll->lIIIIll)
{if(endpoint==IIIll->IIIlllII||endpoint==IIIll->llIlIlIl){lIIlllll(IIIll);}}




do{IlIlllI=NULL;spin_lock_irqsave(&IIIll->IIlIlI,flags);list_for_each_entry(
IllIII,&IIIll->IlIIIII,llllIl){int lIIIlII;
if(IllIII==lIIIIII){continue;}
if(IllIII->endpoint!=endpoint){continue;}lIIIlII=atomic_xchg(&IllIII->state,
IllIlll);
if(lIIIlII==IllIlll||lIIIlII==llIllllII){continue;}
if(IllIII->llIlIlI.IIIlIlIl){


IllIII=lIIIlIII(IIIll,IllIII->IIllI);}if(lIIIlII==lIllIlI){



kref_get(&IllIII->IllIll);

IlIlllI=IllIII;break;}}spin_unlock_irqrestore(&IIIll->IIlIlI,flags);if(IlIlllI){
llllIlllI(IlIlllI);kref_put(&IlIlllI->IllIll,IllIIlII);}}while(IlIlllI);lIIIl(
"\x2d\x2d" "\n");}void lIlIIlIlI(struct IIlll*IIIll,llIIII IIllI,struct IllII*
lIIIIII){int IIIIIlll;unsigned long flags;struct IllII*IllIII,*IlIlllI;lIIIl(
"\x2b\x2b" "\n");if(IIIll->lIIIIll){if(IIIIlIIII(IIIll,IIllI))return;}
spin_lock_irqsave(&IIIll->IIlIlI,flags);



IIIIIlll=(0x485+6452-0x1db9);IlIlllI=NULL;list_for_each_entry(IllIII,&IIIll->
IlIIIII,llllIl){
if(IllIII==lIIIIII){continue;}if(IllIII->IIllI==IIllI){if(atomic_xchg(&IllIII->
state,IllIlll)==lIllIlI){



kref_get(&IllIII->IllIll);

IlIlllI=IllIII;}IIIIIlll=(0x9c5+1251-0xea7);break;}}if(!IIIIIlll){llllIlIl(IIIll
,IIllI);}spin_unlock_irqrestore(&IIIll->IIlIlI,flags);if(IlIlllI){llllIlllI(
IlIlllI);kref_put(&IlIlllI->IllIll,IllIIlII);}else{lIIIl(
"\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64" "\n");}lIIIl("\x2d\x2d" "\n");}void 
lIlIllll(struct IIlll*IIIll,struct IllII*lIIIIII,int IIlllIlIl,int lIlIlIll){
struct IllII*lllIIII,*IllIII;unsigned long flags;IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x6b\x69\x6c\x6c\x5f\x61\x6c\x6c\x5f\x72\x65\x71\x75\x65\x73\x74\x73\x3a\x20\x2b\x2b" "\n"
);

IIIllIlI(IIIll,IIlllIlIl,lIlIlIll);

spin_lock_irqsave(&IIIll->IIlIlI,flags);while(!list_empty(&IIIll->IIIllIIl)){
struct llIlIllI*lllllIl=list_entry(IIIll->IIIllIIl.next,struct llIlIllI,IIIIll);
list_del(&lllllIl->IIIIll);lIlIll(lllllIl);}

do{


lllIIII=NULL;list_for_each_entry(IllIII,&IIIll->IlIIIII,llllIl){if(IIlllIlIl){
IllIII->IIIIIlI=(0x3a9+3065-0xfa1);}if(lIlIlIll){
IllIII->lIllIII=(0xd59+1722-0x1412);}
if(IllIII!=lIIIIII&&atomic_xchg(&IllIII->state,IllIlll)==lIllIlI){



kref_get(&IllIII->IllIll);

lllIIII=IllIII;break;}}spin_unlock_irqrestore(&IIIll->IIlIlI,flags);if(lllIIII){
lllIIIllI(lllIIII);kref_put(&lllIIII->IllIll,IllIIlII);}spin_lock_irqsave(&IIIll
->IIlIlI,flags);}while(lllIIII);spin_unlock_irqrestore(&IIIll->IIlIlI,flags);
IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x6b\x69\x6c\x6c\x5f\x61\x6c\x6c\x5f\x72\x65\x71\x75\x65\x73\x74\x73\x3a\x20\x2d\x2d" "\n"
);}
int IIIlIIlll(struct usb_device*llIII,lIllIl endpoint){int IIlIIII;struct 
usb_host_endpoint*ep;ep=(endpoint&(0x23d+7541-0x1f32))?llIII->ep_in[endpoint&
(0x73a+6960-0x225b)]:llIII->ep_out[endpoint&(0xd24+270-0xe23)];if(!ep){IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x67\x65\x74\x5f\x65\x6e\x64\x70\x6f\x69\x6e\x74\x5f\x6d\x61\x78\x70\x61\x63\x6b\x65\x74\x3a\x20\x65\x6e\x64\x70\x6f\x69\x6e\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c" "\n"
);return-ENODEV;}IIlIIII=le16_to_cpu(ep->desc.wMaxPacketSize);if((ep->desc.
bmAttributes&USB_ENDPOINT_XFERTYPE_MASK)!=USB_ENDPOINT_XFER_ISOC){IIlIIII=
IIlIIII&(0xdcb+1106-0xa1e);}else if(llIII->speed==USB_SPEED_FULL)
{IIlIIII=IIlIIII&(0x1883+672-0x1324);}else if(llIII->speed==USB_SPEED_HIGH)
{IIlIIII=(IIlIIII&2047)*((0x11c6+2276-0x1aa9)+((IIlIIII>>(0x1572+1033-0x1970))&
(0x849+6443-0x2171)));}
#if KERNEL_GT_EQ((0x759+5785-0x1df0),(0x3ff+5077-0x17ce),(0xb2f+5845-0x21e5)) &&\
 KERNEL_LT_EQ((0xe22+6020-0x25a4),(0x4b4+5905-0x1bbf),(0x886+3036-0x1440))
else if(llIII->speed==USB_SPEED_SUPER)
{IIlIIII=(IIlIIII&(0x2095+2013-0x2073))*(ep->ss_ep_comp?(((0x6c6+3484-0x1461)+ep
->ss_ep_comp->desc.bMaxBurst)*((0x288+6535-0x1c0e)+(ep->ss_ep_comp->desc.
bmAttributes&(0x589+7419-0x2281)))):(0x3a5+1883-0xaff));}
#endif 
#if KERNEL_GT_EQ((0x13b5+1340-0x18ef),(0x79a+7223-0x23cb),(0x2e8+6062-0x1a73))
else if(llIII->speed==USB_SPEED_SUPER)
{IIlIIII=(IIlIIII&(0xe96+3790-0x1565))*((0x3a1+1139-0x813)+ep->ss_ep_comp.
bMaxBurst)*((0x1e51+498-0x2042)+(ep->ss_ep_comp.bmAttributes&(0x41+9807-0x268d))
);}
#endif 
#if KERNEL_GT_EQ((0xe3a+4268-0x1ee2),(0xf91+1273-0x1484),(0x837+2669-0x12a4))
else if(llIII->speed==USB_SPEED_SUPER_PLUS)
{
IIlIIII=(IIlIIII&(0x96b+408-0x304))*((0x1389+2289-0x1c79)+ep->ss_ep_comp.
bMaxBurst)*((0xe07+3911-0x1d4d)+(ep->ss_ep_comp.bmAttributes&(0x187c+829-0x1bb6)
));}
#endif 
else{return-EPROTO;}IlllI(
"\x75\x73\x62\x64\x5f\x73\x74\x75\x62\x5f\x67\x65\x74\x5f\x65\x6e\x64\x70\x6f\x69\x6e\x74\x5f\x6d\x61\x78\x70\x61\x63\x6b\x65\x74\x3a\x20\x65\x6e\x64\x70\x6f\x69\x6e\x74\x3d\x30\x78\x25\x30\x32\x78\x20\x6d\x61\x78\x70\x61\x63\x6b\x65\x74\x3d\x25\x64" "\n"
,endpoint,IIlIIII);return IIlIIII;}
#endif 

